/**
 * @项目名称: lession01
 * @文件名称: Demo3.java
 * @Date: 2016年9月21日
 * @Copyright: 2016 www.yunhe.cn Inc. All rights reserved.
 * 注意：本内容仅限于云和数据公司内部传阅，禁止外泄以及用于其他的商业目的
*/
package com.cn.yunhe.redis.study;

import java.util.Set;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 连接池演示，获取和归还连接，销毁连接池
 * 
 * 具体连接的
 * 
 * @author ZSL
 *
 */
public class Demo3 {
	
	/**
	 *日志工具 
	 */
	Logger logger = Logger.getLogger(Demo3.class);
	
	/**
	 * 定个空的连接池
	 */
	JedisPool pool = null; 
	
	/**
	 * 初始化连接池对象，不写端口默认端口是6379，连接的一系列参数都是默认，比如连接池大小等
	 */
	@Before
	public void init(){
		JedisPoolConfig jpconfig = new JedisPoolConfig();
		//最大空闲连接数, 默认8个
		jpconfig.setMaxIdle(8);
		//最小空闲连接数, 默认0
		jpconfig.setMinIdle(0);
		//最大连接数, 默认8个
		jpconfig.setMaxTotal(8);
		//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
		jpconfig.setMaxWaitMillis(-1);
		//在获取连接的时候检查有效性, 默认false
		jpconfig.setTestOnBorrow(true);
		pool = new JedisPool(jpconfig, "192.168.1.138",6379);
	}
	
	/**
	 * 测试连接池
	 */
	@Test
	public void testPool(){
		Jedis jedis = null;
		try {
			//从连接池中获取一个JEDIS连接
		    jedis = pool.getResource();
		    //认证密码
		    //jedis.auth("123456");
		    //执行相关的REDIS操作--设置简单的字符串键值对
		    jedis.set("user", "zhangshunli");
		    String csKeyVal = jedis.get("user");
		    logger.debug("测试key【user】的值为："+csKeyVal);
		    //执行相关的REDIS操作--设置有序集合键值对
		    jedis.zadd("userexam", 89, "user:1001"); 
		    jedis.zadd("userexam", 83, "user:1005"); 
		    Set<String> sose = jedis.zrange("userexam", 0, -1);
		    for (String str:sose) { 
		    	logger.debug(str);
		    }
		} finally {
			//归还JEDIS连接
		    if (jedis != null) {
		    	//表面上是关闭，其实是归还连接，SOCKET连接没真正关闭
		        jedis.close();
		    }
		}
	}
	
	
	/**
	 * 销毁连接池
	 */
	@After
	public void destroy(){
		pool.destroy();
	}
}
